SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE [dbo].[SP_TWSABA_FLUJ_Q01]                
/*-------------------------------------------------------*/                
/*---Empresa              : OFISIS S.A.                --*/                
/*---Cliente              : SANTILLANA              --*/                
/*---Sistema              : Caja y Bancos              --*/                
/*---M+dulo               : Empresa                    --*/                
/*---Programa             : CALCULA SALDO INICIAL  --*/                
/*---Script               : TMSABA_M.SQL          --*/                
/*---Nombre SP            : SP_TWSABA_REPO_Q01   --*/                
/*---Desarrollado por     : EVP          --*/                
/*---Fecha Creacion   : 30/10/2000         --*/                 
/*---Base Datos           : ORACLE          --*/                
/*---Versi+n              : 8.0                        --*/                
/*---Invoca a SP          :                            --*/                
/*-------------------------------------------------------*/                
/*-------------------------------------------------------*/                
/*---Modificado 1 por     : EVP          --*/                
/*---Fecha Modificaci+n   : 23/04/2001    --*/                 
/*---Detalle Modificaci+n : A SQL          --*/                
/*-------------------------------------------------------*/                
/*-------------------------------------------------------*/                
/*---Modificado 2 por     : Carlos Marquez E   --*/                
/*---Fecha Modificaci+n   : 01/09/2005    --*/                 
/*---Detalle Modificaci+n : manejo de Saldos Iniciales  --*/                
/*-------------------------------------------------------*/                
                
/*-------------------------------------------------------*/                
/*---Comentarios                                       --*/                
/*---                                                  --*/                
/*---                                                  --*/                
/*-------------------------------------------------------*/                
                
/*--------------------------------------------------------------------- */                
/* Drop Proc SP_TWSABA_REPO_Q01        */                
/* Grant All On SP_TWSABA_REPO_Q01 To Public     */                
                
--SP_TWSABA_REPO_Q01 '2005-07-31', 'O', 'O' , 'O'                   
                
/*----------------------------------------------------------------------*/                
@ISCO_EMPR TD_VC_002,            
@ISCO_MONE TD_VC_003,            
@IDFE_OPER TD_DT_001               
            
--EXEC SP_TWSABA_FLUJ_Q01 '01', 'DOL', '2007/01/07'            
            
            
 As                
DECLARE                
@CSCO_EMPR TD_VC_002,                
@CSCO_BANC TD_VC_003,              
@CSCO_MONE TD_VC_003,               
@CSNU_CNTA_BANC  TD_VC_020,                
@VSAA_MINI TD_VC_004,                
@VSMM_MINI TD_VC_002,                
                
                
/*Variables*/                
@VNIM_INGR      NUMERIC(16,4),                
@VNIM_EGRE  NUMERIC(16,4),                
@VNIM_SALD_INIC NUMERIC(16,4),                
@VNIM_SALD_MINI NUMERIC(16,4),            
@VSTI_ORIG TD_VC_001,            
@VSTI_CAMB TD_VC_001,            
@VSCO_MONE_DEFA TD_VC_003,            
@VSCO_MONE_EXTR TD_VC_003,          
@VNFA_CAMB_MENS  TD_NU_015_006              
             
            
/*             
Create Table #TWSABA_REPO(                 
    CO_EMPR CHAR(02) NULL,                 
    CO_BANC VARCHAR(03) NULL,                
    NU_CNTA_BANC VARCHAR(20) NULL,                
    AA_BNCO VARCHAR(04) NULL,                
    MM_BNCO VARCHAR(02) NULL,                
    IM_SALD_INIC Numeric(16,4) NULL)                 
                
Create Table #TWSABA_REPO_AUXI(                 
CO_EMPR VARCHAR(02) NULL,                
CO_BANC VARCHAR(03) NULL,                
NU_CNTA_BANC VARCHAR(20) NULL,    
IM_SALD_INIC Numeric(16,4) NULL) */            
             
                
SELECT @VSTI_ORIG = TI_ORIG, @VSTI_CAMB = TI_CAMB, @VSCO_MONE_DEFA = CO_MONE_DEFA, @VSCO_MONE_EXTR = CO_MONE_EXTR             
FROM TMPARA_TESO            
WHERE CO_EMPR = @ISCO_EMPR            
          
SELECT @VNFA_CAMB_MENS = FA_CAMB_CMPR          
FROM TCFACT_PRME          
WHERE CO_MONE = @VSCO_MONE_EXTR                         
AND NU_ANNO = YEAR(@IDFE_OPER)                
AND NU_MESE = MONTH(@IDFE_OPER)          
        
IF ISNULL(@VNFA_CAMB_MENS,0) = 0      
BEGIN      
select @VNFA_CAMB_MENS = (select TOP 1 FA_CAMB_CMPR            
FROM TCFACT_PRME            
WHERE CO_MONE = @VSCO_MONE_EXTR                           
AND ((NU_ANNO = YEAR(@IDFE_OPER)   AND  NU_MESE <= MONTH(@IDFE_OPER) ) OR (NU_ANNO < YEAR(@IDFE_OPER) ))                  
ORDER BY NU_ANNO DESC, NU_MESE DESC)      
END      
      
              
DECLARE CU_TMCNTA_BANC_Q01_2 CURSOR FOR                 
SELECT CO_EMPR , CO_BANC ,  NU_CNTA_BANC, CO_MONE                 
FROM TMCNTA_BANC            
WHERE CO_EMPR = @ISCO_EMPR              
AND CO_BANC NOT LIKE 'OFI%'               
                
BEGIN                
--DELETE FROM #TWSABA_REPO_AUXI                
--DELETE FROM #TWSABA_REPO                
                
-- PARA CALCULAR EL SALDO INICIAL DEL PRIMER PERIODO DE LAS CUENTAS                
Open CU_TMCNTA_BANC_Q01_2                
FETCH CU_TMCNTA_BANC_Q01_2 INTO @CSCO_EMPR , @CSCO_BANC , @CSNU_CNTA_BANC , @CSCO_MONE               
WHILE (@@FETCH_STATUS = 0)                
BEGIN                
                 
 IF (@@FETCH_STATUS < 0)                
 Begin                
  RAISERROR 20001 "FIN DE ARCHIVO"                
  CLOSE CU_TMCNTA_BANC_Q01_2                
  DEALLOCATE CU_TMCNTA_BANC_Q01_2                
  RETURN                
 End                
                 
                 
 SELECT @VSAA_MINI = MIN( AA_BNCO)                
 FROM TMSABA_MENS                
 WHERE RTRIM(CO_EMPR) = RTRIM(@CSCO_EMPR)                
 AND RTRIM(CO_BANC) = RTRIM(@CSCO_BANC)                
 AND RTRIM(NU_CNTA_BANC) = RTRIM(@CSNU_CNTA_BANC)                
                 
 SELECT @VSMM_MINI = MIN( MM_BNCO)                
 FROM TMSABA_MENS                
 WHERE RTRIM(CO_EMPR) = RTRIM(@CSCO_EMPR)                
 AND RTRIM(CO_BANC) = RTRIM(@CSCO_BANC)                
 AND RTRIM(NU_CNTA_BANC) = RTRIM(@CSNU_CNTA_BANC)                
 AND RTRIM(AA_BNCO) = RTRIM(@VSAA_MINI)                
                 
 IF @VSAA_MINI IS NOT NULL AND @VSMM_MINI IS NOT NULL                 
 BEGIN                 
 
  SELECT @VNIM_SALD_MINI =      
( CASE @CSCO_MONE WHEN @ISCO_MONE THEN T1.IM_SALD_INIC            
ELSE                 
 Round( Dbo.FN_TCFACT_CAMB_Q02(@CSCO_MONE, @ISCO_MONE, T1.AA_BNCO +'/' + T1.MM_BNCO +'/'+'01', T1.IM_SALD_INIC, @VSTI_CAMB, @VSTI_ORIG, 'S', @VSCO_MONE_DEFA, @VSCO_MONE_EXTR, isnull((Dbo.FN_TCFACT_CAMB_MENS_Q01 (@ISCO_EMPR,T2.CO_MONE, @ISCO_MONE, CONVERT(INT, @VSAA_MINI), CONVERT(INT,@VSMM_MINI))),0)), 2)
END )          
          
  FROM TMSABA_MENS T1, TMCNTA_BANC T2             
  WHERE RTRIM(T1.CO_EMPR) = RTRIM(@CSCO_EMPR)              
  AND RTRIM(T1.CO_BANC) = RTRIM(@CSCO_BANC)              
  AND RTRIM(T1.NU_CNTA_BANC) = RTRIM(@CSNU_CNTA_BANC)              
  AND RTRIM(T1.AA_BNCO) = RTRIM(@VSAA_MINI)              
  AND RTRIM(T1.MM_BNCO) = RTRIM(@VSMM_MINI)      
  AND T1.CO_EMPR = T2.CO_EMPR           
 AND T1.CO_EMPR = T2.CO_EMPR          
 AND T1.CO_BANC = T2.CO_BANC          
 AND T1.CO_BANC NOT LIKE 'OFI%'           
 AND T1.NU_CNTA_BANC = T2.NU_CNTA_BANC                
            
                  
  INSERT INTO #TWSABA_REPO_AUXI( CO_EMPR, CO_BANC, NU_CNTA_BANC, IM_SALD_INIC)                
  VALUES( @CSCO_EMPR, @CSCO_BANC, @CSNU_CNTA_BANC, @VNIM_SALD_MINI)                
                
 END                
                 
 FETCH CU_TMCNTA_BANC_Q01_2 INTO @CSCO_EMPR , @CSCO_BANC , @CSNU_CNTA_BANC, @CSCO_MONE                
END                
       
CLOSE CU_TMCNTA_BANC_Q01_2                
DEALLOCATE CU_TMCNTA_BANC_Q01_2                
               
                 
 INSERT INTO #TWSABA_REPO ( CO_EMPR, CO_BANC, NU_CNTA_BANC, IM_SALD_INIC )                
 SELECT TCMOVI_BANC.CO_EMPR, TCMOVI_BANC.CO_BANC, TCMOVI_BANC.NU_CNTA_BANC,                 
 (Isnull(Sum( Isnull( Round(Dbo.FN_TCFACT_CAMB_Q02(TMCNTA_BANC.CO_MONE, @ISCO_MONE, TCMOVI_BANC.FE_OPER,                
TCMOVI_BANC.IM_MOVI * ( PATINDEX(TCMOVI_BANC.TI_MOVI_BANC, 'I') - PATINDEX(TCMOVI_BANC.TI_MOVI_BANC, 'E')),                 
@VSTI_CAMB, @VSTI_ORIG, 'S', @VSCO_MONE_DEFA, @VSCO_MONE_EXTR, IsNull(    
(Dbo.FN_TCFACT_CAMB_MENS_Q01 (@ISCO_EMPR,TMCNTA_BANC.CO_MONE, @ISCO_MONE, YEAR(TCMOVI_BANC.FE_OPER), MONTH(TCMOVI_BANC.FE_OPER)))    ,0)), 2),0)),0))             
 FROM TCMOVI_BANC, TMCNTA_BANC                 
 WHERE TCMOVI_BANC.CO_EMPR = @ISCO_EMPR             
 AND TCMOVI_BANC.CO_EMPR = TMCNTA_BANC.CO_EMPR            
 AND TCMOVI_BANC.CO_BANC = TMCNTA_BANC.CO_BANC            
 AND TCMOVI_BANC.CO_BANC NOT LIKE 'OFI%'             
 AND TCMOVI_BANC.NU_CNTA_BANC = TMCNTA_BANC.NU_CNTA_BANC            
 AND TCMOVI_BANC.FE_OPER <= @IDFE_OPER           
 AND TCMOVI_BANC.TI_SITU IN ('ACT', 'EXT')                 
 GROUP BY TCMOVI_BANC.CO_EMPR, TCMOVI_BANC.CO_BANC, TCMOVI_BANC.NU_CNTA_BANC                
                 
                
-- INSERTO CUENTAS QUE NO HAN TENIDO MOVIMIENTOS, ES DECIR AUN NO ESTAN GRABADAS EN TABLA #TWSABA REPO                
INSERT INTO #TWSABA_REPO( CO_EMPR, CO_BANC, NU_CNTA_BANC, IM_SALD_INIC )                
SELECT T2.CO_EMPR, T2.CO_BANC, T2.NU_CNTA_BANC, 0                
FROM TMCNTA_BANC T2                
WHERE NOT EXISTS                
(SELECT T1.CO_EMPR FROM #TWSABA_REPO T1                
WHERE RTRIM(T1.CO_EMPR) = RTRIM(T2.CO_EMPR)                
AND RTRIM(T1.CO_BANC) = RTRIM(T2.CO_BANC)                 
AND RTRIM(T1.NU_CNTA_BANC) = RTRIM(T2.NU_CNTA_BANC))               
AND CO_EMPR = @ISCO_EMPR            
AND CO_BANC NOT LIKE 'OFI%'             
             
            
               
-- ACTUALIZO EL SALDO INICIAL MAS EL SALDO INICIAL DEL PRIMER PERIODO QUE SE ABRIO                
UPDATE #TWSABA_REPO                 
SET #TWSABA_REPO.IM_SALD_INIC =  ( SELECT ISNULL(T2.IM_SALD_INIC,0) + ISNULL(#TWSABA_REPO.IM_SALD_INIC,0) FROM #TWSABA_REPO_AUXI T2                
         WHERE RTRIM(#TWSABA_REPO.CO_EMPR) = RTRIM(T2.CO_EMPR)                
         AND RTRIM(#TWSABA_REPO.CO_BANC) = RTRIM(T2.CO_BANC)                
         AND RTRIM(#TWSABA_REPO.NU_CNTA_BANC) = RTRIM(T2.NU_CNTA_BANC))                
WHERE EXISTS( SELECT T3.CO_EMPR                
FROM #TWSABA_REPO_AUXI T3                
WHERE #TWSABA_REPO.CO_EMPR = T3.CO_EMPR                
AND #TWSABA_REPO.CO_BANC = T3.CO_BANC                
AND #TWSABA_REPO.NU_CNTA_BANC = T3.NU_CNTA_BANC )                
             
--SELECT *FROM #TWSABA_REPO            
--SELECT *FROM #TWSABA_REPO_AUXI            
            
END -- FIN SP                
/*------------------------------ FIN ---------------------------------*/


GO
